//package com.domdd.service.rocketmq;
//
//import org.apache.rocketmq.client.producer.DefaultMQProducer;
//import org.apache.rocketmq.client.producer.SendCallback;
//import org.apache.rocketmq.client.producer.SendResult;
//import org.apache.rocketmq.common.message.Message;
//import org.apache.rocketmq.remoting.common.RemotingHelper;
//
//import java.util.concurrent.CountDownLatch;
//import java.util.concurrent.TimeUnit;
//
///**
// * @author lw
// * @date 2022/3/2 4:03 下午
// */
//public class AsyncProducer {
//    /**
//     * 异步消息发送一般用来对方法调用响应时间有较严格要求的情况下，异步调用，立即返回。不同于同步的唯一在于：
//     * send方法调用的时候多携带一个回调接口参数 SendCallBack，用来异步处理消息发送结果；
//     * 另外还可以使用 setRetryTimesWhenSendAsyncFailed 方法来设置异步消息发送失败重试次数。
//     *
//     * ————————————————
//     * 版权声明：本文为CSDN博主「championzgj」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
//     * 原文链接：https://blog.csdn.net/championzgj/article/details/90726080
//     * @param args
//     * @throws Exception
//     */
//    public static void main(String[] args) throws Exception {
//        //Instantiate with a producer group name.
//        DefaultMQProducer producer = new DefaultMQProducer("lw");
//        // Specify name server addresses.
//        producer.setNamesrvAddr("47.98.252.4:9876");
//        //Launch the instance.
//        producer.start();
//        producer.setRetryTimesWhenSendAsyncFailed(0);
//
//        int messageCount = 100;
//        final CountDownLatch countDownLatch = new CountDownLatch(messageCount);
//        for (int i = 0; i < messageCount; i++) {
//            try {
//                final int index = i;
//                Message msg = new Message("Jodie_topic_1023",
//                        "TagA",
//                        "OrderID188",
//                        "Hello world".getBytes(RemotingHelper.DEFAULT_CHARSET));
//                producer.send(msg, new SendCallback() {
//                    @Override
//                    public void onSuccess(SendResult sendResult) {
//                        countDownLatch.countDown();
//                        System.out.printf("%-10d OK %s %n", index, sendResult.getMsgId());
//                    }
//
//                    @Override
//                    public void onException(Throwable e) {
//                        countDownLatch.countDown();
//                        System.out.printf("%-10d Exception %s %n", index, e);
//                        e.printStackTrace();
//                    }
//                });
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }
//        countDownLatch.await(5, TimeUnit.SECONDS);
//        producer.shutdown();
//    }
//}